package com.cnap.db.mapper;

import com.cnap.db.entity.ScheduleStrategyPO;
import com.cnap.model.intelligent.UpdateIntelligentDTO;
import com.cnap.model.schedule.engine.alg.AlgDeployClusterInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 调度策略mapper
 *
 * @author xc
 **/
@Mapper
@Component
public interface ScheduleStrategyMapper {


    /**
     * 插入策略信息
     *
     * @param scheduleStrategyPO 策略信息
     * @return 结果
     */
    int insertScheduleStrategy(@Param("strategy") ScheduleStrategyPO scheduleStrategyPO);

    /**
     * 根据微服务id查询
     *
     * @param serviceId 微服务id
     * @return 结果
     */
    ScheduleStrategyPO selectByServiceId(@Param("svcId") String serviceId);

    /**
     * 根据微服务id删除
     *
     * @param serviceId 微服务id
     * @return 结果
     */
    int deleteByServiceId(@Param("svcId") String serviceId);

    /**
     * 根据id删除策略
     *
     * @param strategyId 策略id
     * @return 结果
     */
    int deleteById(@Param("id") String strategyId);

    /**
     * 根据id更新用户选择
     *
     * @param svcId           服务id
     * @param userChooseCloud 用户选择
     * @return 结果
     */
    int updateUserChooseCloudById(@Param("svcId") String svcId,
                                  @Param("userChooseCloud") String userChooseCloud,
                                  @Param("userChooseAccountName") String userChooseAccountName);

    /**
     * 更新智能调度策略
     *
     * @param updateIntelligentDTO 参数
     * @return 结果
     */
    int updateIntelligentParam(@Param("updateParam") UpdateIntelligentDTO updateIntelligentDTO);

    /**
     * 根据微服务id更新算法信息
     *
     * @param svcId                    微服务id
     * @param recommendCloud           recommend
     * @param userChooseCloud          userChoose
     * @param algDeployClusterInfoList algDeploy
     * @return 结果
     */
    int updateAlgInfoBySvcId(@Param("svcId") String svcId, @Param("recommendCloud") String recommendCloud,
                             @Param("userChooseCloud") String userChooseCloud,
                             @Param("algClusterInfos") List<AlgDeployClusterInfo> algDeployClusterInfoList,
                             @Param("userChooseAccountName") String userChooseAccountName,
                             @Param("recommendAccountName") String recommendAccountName);
}
